#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#include "paciente.h"
#include "hash.h"

int main (int argc, char** argv) {
	int i;
        int colisao = 0;
        int colInd, colMax = INT_MIN;
        Paciente** testePaciente;
        Paciente* auxPaciente;
        int numPacientes = 0;

        FILE* fTeste = fopen("teste.txt", "w");

        if (argc != 2) {
                printf("Bad arguments, no doughnut for you\n");
                exit(1);
        }

	/* Cabeçalho do arquivo com os dados do mesmo. */
	fprintf(fTeste, "Numero total de colisoes: 00000\n");
        fprintf(fTeste, "Colisao maxima num index: 0\n");
        fprintf(fTeste, "Numero de pacientes lidos: 00000\n\n");
 
        testePaciente = leArquivo(argv[1]);

	/* Escreve num arquivo o resultado da hash. */
        for (i=0; i<65000; i++) {
        	
        	/* Se o conteúdo do vetor for nulo, deixa tudo zerado, apenas. */
        	if (testePaciente[i] == NULL) {
        		fprintf(fTeste, "indice: %d	", i);
        	        fprintf(fTeste, "CPF: 000000000\n");        	
        	}
        	
        	if (testePaciente[i] != NULL) {
        		
        		/* Procura o indice com maior colisão. */
        		colInd = testePaciente[i]->colisao;
        		
        		if (colInd > colMax) {
        			colMax = colInd;
        		}
        		
        		/* Imprime o CPF. */
        		fprintf(fTeste, "indice: %d	", i);
        	        fprintf(fTeste, "CPF: %09d   ", testePaciente[i]->CPF);
        	        numPacientes++;
        	        
        	        /* Se não tiver apenas um elemento no indice, mas sim uma lista, percorre a lista inteira, imprimindo cada CPF. */
        	        auxPaciente = testePaciente[i];
        	        
        	        while (auxPaciente->prox != NULL) {
        	        	fprintf(fTeste, "%09d	", auxPaciente->prox->CPF);
        	        	auxPaciente = auxPaciente->prox;  
        	        	numPacientes++;
        	        	colisao++;
        	        }
        	        
        	        fprintf(fTeste, "\n");
    
                }
         }
         
         zeraVetor(testePaciente, 65000);
                
         /* Coloca os valores no cabeçalho. */
         fseek(fTeste, 26, SEEK_SET);
         fprintf(fTeste, "%d\n", colisao);
         fseek(fTeste, 26, SEEK_CUR);
         fprintf(fTeste, "%d\n", colMax);
         fseek(fTeste, 27, SEEK_CUR);
         fprintf(fTeste, "%d\n\n", numPacientes);

         fclose(fTeste);

         return 0;
}
